package com.wanakiko.impldetails.client;

import java.lang.reflect.Method;

public class JdkDynamicProxy {

    public static void main(String[] args) {

    }

    /**
     * 创建代理实例
     *
     * @param handler 调用处理程序
     * @param clazz   目标类
     * @return 代理对象
     */
    public ITarget createProxyInstance(final InvocationHandler handler, final Class<?> clazz) {
        return new ITarget() {
            @Override
            public void execute() {
                try {
                    Method method = clazz.getMethod("execute");
                    handler.invoke(JdkDynamicProxy.this, method);
                } catch (NoSuchMethodException e) {
                    e.printStackTrace();
                }
            }
        };
    }
}

interface InvocationHandler {
    /**
     * 执行处理方法
     *
     * @param object 目标对象
     * @param method 目标方法
     * @param args   方法参数
     * @return 处理器对象
     */
    Object invoke(Object object, Method method, Object... args);
}

interface ITarget {
    void execute();
}
